(レポート) 内製ツールを使ったチート診断・脆弱性診断 #denatechcon
はじめに
本ブログは2018年2月7日(水)に開催されたDeNA TECH CONFERENCE 2018のセッション、「内製ツールを使ったチート診断・脆弱性診断」のレポートです。
スピーカーは株式会社DeNAの汐田 徹也さん。
レポート
自己紹介
セキュリティエンジニア。
ミッション。
ほぼ全てのサービスの脆弱性診断。
オンラインモバイルゲーム、ゲームプラットフォーム、ECサイト、エンタメ系、オートモーティブ、コミュニティ、ヘルスケア...
設計のセキュリティ面のレビュー。
DeNAの脆弱性診断について
セキュリティ部セキュリティ技術グループ。
エンジニアだけの組織、10人弱。
ほぼ全てのサービスの脆弱性診断を実施。
新規のゲームがリリースされる時には2周間程度貼り付け。
ネットワーク診断も実施。
診断チームと開発者の関わり方。
内製ならではの大きなメリット。
スケジュールを柔軟に設定可能。
社内特有のフレームワークを理解して診断できる。
診断経験を活かした設計のレビューや相談の対応が可能に。
設計レビュー、開発相談対応、脆弱性診断による検証、リリース後の情報収集。
診断対象はサーバサイドもクライアントサイドも対象。
主な診断対象。
インジェクション、CSRF、権限、認証、チート等。
手法。
ブラックボックス診断。
開発環境/検証環境を使って診断。
変な結果が出たらソースコードをもらって確認。
権限や認証のような複雑な処理もソースコードをもらって確認。
通信の改ざん、アプリやメモリの改ざん。
ツール。
Burp Suite Professional,VEX、PacketProxy(内製)、IDA Pro、MemoryPatching(内製)
インジェクション系/CSRFの診断。
自動で見れるところはスキャナ等のツールを使って自動化。
その他はマニュアルで診断。
権限周りの診断。
通信改ざんで本来出来ない操作ができないかを確認。
自動化しづらいため手動で実施。
ゲーム性によって脆弱性なのか仕様なのか違う。
他人のメッセージが読める、他人のトレードが承認できる、他人のプレゼントボックスが受け取れる→致命的。
認証周りの診断。
ログイン機能、SNSログイン、e.t.c.
診断で見つけたくない、設計レビューで落としたい脆弱性。
修正が大変。
ありがちなパターンが存在。
SNSのIDだけでトークンを利用していない、等。
チート系の診断。
防げるチート。
サーバ側のゲームロジックの実装不備。
ゲーム特有で、結構観点出しが難しい。
例えば、鎧を頭に装備出来てしまうとか。
典型的なゲーム脆弱性リストを作っておくと良い。
バリデーションミスで個数にマイナスを設定出来るとか。
防げないチート。
ゲームのアーキテクチャに依存。
クライアント側にゲームロジックが存在するため。
メモリ改ざんやバイナリ改ざん等。
改ざんしたのか上手にプレイしたのかが区別できない。
チート対策はいたちごっこ。
完璧なチート対策は無い。
最近のゲームではある程度クライアント側にロジックをもたせざるを得ない。
諦めずに数を減らすことが重要。
遊んでいてチーターがいるとUXが下がる。対応することがUX向上に繋がる。
複合的に対策を導入することで改ざんを防いでいく。
「チートはできる」ので「されにくく」する。
されにくさって?
攻撃の前提を上げていくこと。
防げる攻撃者の技術レベルを仮定する。
このレベルなら防げないけどこのレベルまでは防げる、のように。
認証や権限管理は「されにくさ」で守るべきではない。
アカウントの乗っ取りや他人のセーブデータを破壊することは絶対に守るべき。
ゲームの進捗や成績の偽装、いたずらは「されにくさ」で守って良い。
リスクコントロール。
技術力のある攻撃者が最大限解析したら何が出来るのか、を把握する。
人気のあるゲームは攻撃されやすい。
リリースする国によっても変わる。
診断者は、攻撃者が出来る攻撃を効率よく再現出来る必要がある。
高度な攻撃者は何が出来るのか?
サーバ側APIのパラメタを自由に設定して送信すること。
通信上で表現できること=クライアントを解析した攻撃者が出来ること。
高度な攻撃者を再現する。
クライアント上での攻撃の結果は、全て通信上のパラメタで再現できる。
内製診断ツールについて
PacketProxy。
高度な攻撃者として診断する準備。
暗号化/難読化が解かれていること。
各パラメタの意味がわかること。
各パラメタを自由に改ざんできること。
通信を自由に再送できること。
それらを出来るようにするために作ったツール。
HTTP以外の解析・改ざんに強い。
TCP/UDPの通信をキャプチャ・改ざん可能。
スマートホンの通信をProxyするためにDNSサーバを内包。
ゲームに特化した機能。
連射機能等。
TCP/UDPのための機能。
ペイドードの分割・デコード・エンコードをプラグインとして実装可能。
あらゆる通信をHTTPのように読める。
一度誰かがプラグインを書けば他の人が引き継ぎ出来る、解析の属人性が排除出来る。
プラグイン処理の流れ。
TCP/UDP通信を分割、デコード、エンコードする。
意味を持つ単位でパケットを分割。
パケットをJSON等の可読文字に変換。
可読文字から元のプロトコルに戻す。
まとめ
DeNAでは脆弱性診断を内製で行っている。
チート対策は「されにくく」することが重要。
「されにくくする」対策を解除することで、高度な攻撃者を想定してリスクを洗い出す。
対策を解除することが今後の対策へのフィードバックになる。
通信改ざんで様々な独自プロトコルに対応するためにPacketProxyを内製。
実際に診断でメインに活用。
さいごに
とても興味深い発表でした。チート対策についてはゲームのノウハウが詰まっていて面白かったです。